package _06递归;

public class RecursionDemo {
	
	public static void main(String[] args) 
	{
	
		// 求阶乘
		// 5! = 1*2*3*4*5
		// n! = 1*2*3*4*...*n
		
		// 普通做法
		System.out.println(foo1(5));
		
		
		// 递归
		// n!  =  n * (n-1)!
		
		// 5!  =  5 * 4!
		// 4!  =  4 * 3!
		// 3!  =  3 * 2!
		// 2!  =  2 * 1!
		// 1!  =  1
		
//		System.out.println(foo2(5));
		
		
		// 1+2+3+...+ n
		// 
		System.out.println(foo3(100000));
		
		// 递归层次太多，造成栈溢出
		// Exception in thread "main" java.lang.StackOverflowError

	}
	
	static int foo1(int n)
	{
		int result = 1;
		for(int i=2;i<=n;i++)
		{
			result *= i;
		}
		return result;
	}
	
	static int foo2(int n)
	{
		if(n==1)
		{
			return 1;
		}
		else
		{
			return n * foo2(n-1);
		}
	}
	
	static int foo3(int n)
	{
		if(n==1)
		{
			return 1;
		}
		else
		{
			return n + foo3(n-1);
		}
	}

}
